home *** CD-ROM | disk | FTP | other *** search
- Linux Keystroke HOWTO
- Zenon Fortuna zenon@netcom.com
- v2.0, kwiecie± 1995
-
- Wersja polska: Gwidon S. Naskrent naskrent@hoth.amu.edu.pl
- v1.0, 29 X 1997
-
- 1. Co to jest Keystroke-HOWTO?
-
-
- Dokument ten napisany zosta│ dla u┐ytkownik≤w kt≤rzy chc▒ przypisaµ
- specjalne czynno╢ci niekt≤rym klawiszom na klawiaturze. Sugerowana
- metoda to u┐ycie loadkeys(1) b▒d╝ zmiana defkeymap.c i zbudowanie na
- nowo j▒dra.
-
- Tekst ten NIE omawia przemapowywania klawiszy klawiatury, np. Delete
- czy BackSpace. Co do informacji na temat przemapowywania klawiszy
- przeczytaj Backspace Mimi-HOWTO autorstwa Stevena Lee.
-
- MetodΩ opisan▒ poni┐ej przetestowano na j▒drze 1.2.1, zamieszczonym w
- dystrybucji 2.2 Slackware.
-
-
- 2. Historia zmian
-
-
- 4 IV 95 - wersja 2.0 Przystosowana do wersji j▒dra 1.2.1; -proste
- zmiany w sugerowanych modyfikacjach pliku "my_keytable.map"
- -zmodyfikowany przyk│ad "key_macro" ze zrzutami ekranu przez /dev/vcs*
-
- 7 V 94 - wersja 1.0 Wersja wyj╢ciowa Keystroke-HOWTO, oparta w
- dzia│aniu na wersji j▒dra 1.0
-
-
- 3. Kr≤tki opis
-
-
- Wirtualny terminal Linuxa oraz sterowniki klawiatury przyjmuj▒
- domy╢lny uk│ad klawiatury taki jak zdefiniowany w pliku
- /drivers/char/defkeymap. c ╝r≤de│ j▒dra. Dwunastu klawiszom
- funkcyjnym PC przydaµ mo┐na │a±cuchy przypisane wykonywanym przez nie
- czynno╢ciom. Po naci╢niΩciu kt≤rego╢ z tych klawiszy, byµ mo┐e z
- dodanymi klawiszami Alt lub Ctrl, bie┐▒cy wirtualny terminal dodaje
- okre╢lony │a±cuch do swoich bufor≤w danych wej╢ciowych i wyj╢ciowych,
- emuluj▒c w efekcie wprowadzenie owego │a±cucha tak jakby zosta│
- wpisany z klawiatury.
-
- Ustawieniem odpowiedniego │a±cucha dla danego klawisza funkcyjnego
- mo┐emy upro╢ciµ wykonywanie wybranych komend, na przyk│ad wywo│uj▒c
- skrypt pow│oki /usr/local/bin/key_macro, kt≤ry mo┐emy utworzyµ i
- modyfikowaµ wedle w│asnego uznania.
-
- 3. NarzΩdzia do modyfikacji sterownika klawiatury.
-
- Mo┐emy u┐yµ loadkeys(1), dumpkeys(1) oraz showkey(1):
-
-
- ╖ narzΩdzie loadkeys(1) pomaga za│adowaµ nowe ci▒gi znak≤w do bufor≤w
- klawiatury j▒dra, lub przygotowuje nowy kod w C modyfikuj▒cy j▒dro,
-
- ╖ dumpkeys(1) powinno byµ u┐ywane dla wydostania bie┐▒cego uk│adu
- klawiatury do obejrzenia lub modyfikacji,
-
- ╖ showkey(1) mo┐e nam pomoµ w otrzymaniu kodu klawisza okre╢lonego
- klawisza funkcyjnego.
-
- Je╢li tw≤j system linuxowy nie posiada tych narzΩdzi, mo┐esz je zdobyµ
- poprzez ftp jako pakiet kbd-0.89.tar.gz lub kbd-0.90.tar.gz z
- sunsite.unc.edu:/pub/Linux/system/Keyboards, lub
- tsx-11.mit.edu:/pub/linux/sources/system Powiniene╢ u┐yµ GNUsowskiego
- tar aby wypakowaµ potrzebne pliki.
-
-
- 4. Zmiana pliku uk│adu klawiatury
-
-
- J▒dro Linuxa zawiera skompilowany kod defkeymap.c, kt≤ry tworzony jest
- narzΩdziem loadkeys(1) z pliku defkeymap.map. Oba pliki umieszczone s▒
- w katalogu src/linux/drivers/char.
-
- Potrzebujemy zmodyfikowaµ plik defkeymap.map, tak wiΩc zr≤bmy jego
- lokaln▒ kopiΩ przez
-
-
-
- # cp defkeymap.map my_keytable.map
-
-
-
-
- lub
-
-
-
- # dumpkeys > my_keytable.map
-
-
-
-
- Istnieje tak┐e du┐y zbi≤r r≤┐nych plik≤w z uk│adami klawiatury w
- katalogu /usr/lib/kbd/keytables, z kt≤rych defkeymap.map mo┐e zostaµ
- u┐yty w twoim systemie w miejsce src/linux/drivers/char/defkeymap.map.
-
- Poleca siΩ metodΩ u┐ywaj▒c▒ dumpkeys(1), poniewa┐ zdarzyµ siΩ mo┐e i┐
- twoje j▒dro by│o ju┐ modyfikowane lub utworzony dla ciebie z innym
- plikiem defkeymap.map ni┐ ten kt≤ry mo┐esz znale╝µ.
-
- Przeczytajmy zawarto╢µ pliku my_keytable.map: znajduje siΩ tam ponad
- 300 linii kodu, i mo┐emy tam znale╝µ trzy grupy deklaracji: pierwsza
- sk│ada siΩ z linii zawieraj▒cych s│owo "keycode", byµ mo┐e z
- do│▒czonymi dodatkowymi s│owami w rodzaju "alt", "control", itd. Druga
- grupa sk│ada siΩ z linii ze s│owem "string", trzecia z linii ze s│owem
- "compose".
-
- WiΩcej o sk│adni tego pliku mo┐na przeczytaµ w keytables(5)
-
-
- 4.1. Przyk│ad modyfikacji pliku uk│adu klawiatury
-
-
- Jako przyk│ad przypisania makro│a±cucha naci╢niΩciu klawisza
- funcyjnego, ka┐my Ctrl-F1 wywo│ywaµ nasz skrypt
- /usr/local/bin/key_macro.
-
- Po pierwsze powinni╢my dowiedzieµ siΩ jaki jest kod klawisza
- funkcyjnego F1. Mo┐emy narzΩdzia u┐yµ showkey(1) i poznaµ kod
- naciskaj▒c F1.
-
- Zamiast tego mo┐emy poszukaµ ci▒gu "F1" w pliku my_keytable.map i
- znale╝µ nastΩpuj▒c▒ liniΩ:
-
-
- keycode 59 = F1
-
-
-
-
- Sugeruje to ┐e kodem klawisza dla F1 jest 59. Linia ta okre╢la r≤wnie┐
- ┐e po naci╢niΩciu F1 sterownik klawiatury powinien wys│aµ │a±cuch
- oznaczony kodem "F1". Aby zobaczyµ zawarto╢µ tego │a±cucha, poszukaµ
- mo┐na wzoru "string F1" i znale╝µ
-
-
-
- string F1 = "\033[[A"
-
-
-
-
- Oznacza to ┐e po naci╢niΩciu klawisza F1 sterownik klawiatury wysy│a
- "Esc [ [ A" (bez spacji).
-
- Nie powinni╢my zmieniaµ tego │a±cucha, poniewa┐ niekt≤re aplikacje
- polegaj▒ na nim jako na domy╢lnej czynno╢ci klawisza F1.
-
- Mo┐emy jednak zdefiniowaµ now▒ czynno╢µ dla Ctrl-F1, za│o┐ywszy ┐e nie
- jest ona zarezerwowana przez j▒dro dla innych specjalnych czynno╢ci.
- Aby obejrzeµ przypisania klawisza F1 razem z Ctrl, Shift i innymi
- trybami, mo┐emy zagl▒dn▒µ do pliku my_keytable.map u┐ywaj▒c:
-
-
-
- # grep 59 my_keytable.map
-
-
-
-
- W przypadku gdy nie ma tam linii z "control keycode 59", mo┐emy u┐yµ
- Ctrl-F1 bez problem≤w (gdy istnieje linia z "shift control keycode 59
- nadal wszystko jest ok).
-
- Dodajmy nastΩpuj▒c▒ liniΩ do pliku my_keytable.map:
-
-
-
- control keycode 59 = key_symbol
-
-
-
-
- gdzie "key_symbol" okre╢laµ bΩdzie czynno╢µ klawisza Ctrl-F1. J▒dro
- 1.2.* pozwala na dynamiczn▒ alokacjΩ │a±cuch≤w, ale nazwa dla
- "key_symbol" musi zostaµ wybrana tylko z ustalonego zbioru nazw.
- MiΩdzy innymi dozwolone s▒ symbole F1-F246. Dla my_keytable.map w moim
- systemie nieu┐ywane by│o F21, ale powiniene╢ obejrzeµ sw≤j plik i
- wybraµ odpowiedni klawsym. Mo┐emy wiΩc dopisaµ liniΩ:
-
-
-
- control keycode 59 = F21
-
-
-
-
- Teraz musimy zdefiniowaµ zawarto╢µ F21, dodaj▒c liniΩ
-
-
-
- string F21 = "/usr/local/bin/key_macro\n"
-
-
-
-
- Podsumowywuj▒c, uczynili╢my dwie zmiany w stosunku do oryginalnego
- my_keytable.map: zadeklarowali╢my nowy │a±cuch F21 oraz to ┐e Ctrl-F1
- bΩdzie wywo│ywaµ zawarto╢µ F21.
-
-
- 4.2. Czasowe zmiany w ustawieniach klawiatury
-
-
- Zmieniwszy w│a╢ciwie my_keytable.map mo┐emy skopiowaµ zmiany do
- sterownika klawiatury j▒dra u┐ywaj▒c narzΩdzia loadkeys(1):
-
-
-
- % loadkeys my_keytable.map
-
-
-
-
- Pozwolenie modyfikacji sterownika klawiatury j▒dra dawane jest ka┐demu
- kto posiada prawa odczytu urz▒dzenia /dev/console.
-
- Aby sprawdziµ czy zamierzone zmiany zosta│y zainstalowane, mo┐emy u┐yµ
- narzΩdzia dumpkeys(1) by sprawdziµ warto╢µ F21, na przyk│ad:
-
-
-
- % dumpkeys | grep F21
-
-
-
-
- Mo┐emy zobaczyµ:
-
-
-
- keycode 59 = F1 F11 Console_13 F21
-
- string F21 = "/usr/local/bin/key_macro\012"
-
-
-
-
- co jest ok, bowiem "\012", lub LF, odpowiada \n
-
- Teraz naci╢niΩcie Ctrl-F1 powinno wywo│aµ skrypt
- /usr/local/bin/key_macro, tak jak zamierzali╢my.
-
-
- 4.3. Zmiany na sta│e
-
-
- Zmiany w sterowniku klawiatury j▒dra narzucone loadkeys(1) trwaj▒ do
- nastΩpnego prze│adowania systemu (albo nastΩpnego odwo│ania do
- loadkeys).
-
- Mo┐emy zmieniµ plik /etc/rc.d/rc.local aby wywo│a│ loadkeys z naszym
- plikiem my_keytable.map jako argumentem. Zamiast tego zmodyfikowaµ
- mo┐emy src/linux/drivers/char/defkeymap.c i ponownie skompilowaµ j▒dro
- z nowymi warto╢ciami domy╢lnymi.
-
-
- Nie powinni╢my zmieniaµ pliku defkeymap.c rΩcznie, lecz raczej
- wygenerowaµ go narzΩdziem loadkeys(1):
-
-
-
- # mv defkeymap.c defkeymap.c.ORIG
- # loadkeys --mktable my_keytable.map > defkeymap.c
-
-
-
-
- NastΩpnie powinni╢my wygenerowaµ nowe j▒dro, zasadniczo zmieniaj▒c
- katalog na bazowy katalog ╝r≤de│ j▒dra, i u┐ywaj▒c make(1).
-
- W ko±cu, powinni╢my u┐yµ lilo(1) aby zainstalowaµ i za│adowaµ nasze
- nowe j▒dro.
-
-
- 5. Przyk│ad skryptu key_macro
-
-
- Szczeg≤lnie u┐ytecznym skryptem dla prostych operacji zwi▒zanych z
- naciskaniem klawiszy mo┐e byµ skrypt pow│oki przygotowywuj▒cy, b▒d╝
- drukuj▒cy, zrzut ekranu.
-
- Przyk│ad ten uleg│ zmianie od czas≤w wersji 1.0 Linuxa, z powodu zmian
- w j▒drze, kt≤re nie udostΩpnia ju┐ wywo│ania systemowego
- ioctl(0,TIOCLINUX).
-
- Aby przeczytaµ zrzuty ekranu wirtualnej konsoli nale┐y wpierw
- przygotowaµ parΩ plik≤w urz▒dze±. Jako root mo┐emy stworzyµ co
- nastΩpuje:
-
-
-
- # mknod /dev/vcs1 c 7 1
- # mknod /dev/vcs2 c 7 2
- ...
- # mknod /dev/vcs63 c 7 63
-
-
-
-
- Oczywi╢cie wystarczy mieµ tylko pliki /dev/vcs* odpowiednie dla
- wirtualnych konsoli kt≤rych siΩ u┐ywa.
-
- Kod poni┐ej powinien byµ uwa┐any za przyk│ad mo┐liwego pliku
- /usr/local/bin/key_macro:
-
-
-
- #!/bin/sh
- #
- # Oto przyk│ad u┐ytecznego skryptu key_macro
- #
-
- VT_NUMBER=`tty|cut -c9-`
- FILE=/tmp/vt$VT_NUMBER.dump
- cp /dev/vcs$VT_NUMBER $FILE
- echo zrzut ekranu zachowany w $FILE
- #
- # Odkomentuj poni┐sz▒ liniΩ gdy chcesz by zrzut by│ drukowany
- # lpr $FILE
-
-
-
- 6. Uwagi
-
-
- Nie ma praktycznego limitu sumy d│ugo╢ci wszystkich │a±cuch≤w kt≤re
- mogliby╢my chcieµ za│adowaµ do sterownika klawiatury. Poprzedni sta│y
- bufor d│ugo╢ci FUNC_BUFSIZE (ustawiony na 512 bajt≤w) zosta│ w Linuxie
- 1.2.* zast▒piony strategi▒ dynamicznego przydzielania bufor≤w w
- kawa│kach po 512 bajt≤w ka┐dy.
-
- Naj╢wie┐sz▒ kopiΩ Keystroke-HOWTO znale╝µ mo┐na w
-
- <>"ftp.netcom.com:/pub/ze/zenon/linux/howto"
- name="ftp.netcom.com:/pub/ze/zenon/linux/howto">
-
-
- 7. Dalsze pomys│y?
-
-
- W razie gdyby╢ znalaz│ co╢ wartego dodania do tego dokumentu, prze╢lij
- proszΩ swoje uwagi na adres <>"mailto:zenon@netcom.com" name=
- "zenon@netcom.com"> - dziΩki (zf).
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-